package com.linln.modules.system.domain;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.linln.common.enums.StatusEnum;
import com.linln.common.utils.StatusUtil;
import com.linln.component.excel.annotation.Excel;
import com.linln.component.excel.enums.ExcelType;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import org.hibernate.annotations.SQLDelete;
import org.hibernate.annotations.Where;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.jpa.domain.support.AuditingEntityListener;
import org.springframework.format.annotation.DateTimeFormat;

import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;

/**
 * @author 小懒虫
 * @date 2018/8/14
 */
@Data
@Entity
@Table(name = "pcs_patient")
@ToString(exclude = {"dept", "roles"})
@EqualsAndHashCode(exclude = {"dept", "roles"})
@EntityListeners(AuditingEntityListener.class)
@SQLDelete(sql = "update pcs_order_porters" + StatusUtil.SLICE_DELETE)
@Where(clause = StatusUtil.NOT_DELETE)
@Excel("患者")
public class Patient implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Excel(value = "ID", type = ExcelType.EXPORT)
    private Long id;

    @CreatedDate
    @Excel("创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd")
    private Date createTime;

    @LastModifiedDate
    @Excel("更新时间")
    private Date updateTime;

    @JsonIgnore
    private Long createUser;

    @JsonIgnore
    private Long updateUser;

    @Excel("姓名")
    private String name; // 新增字段

    @Excel("身份证号")
    private String cardNo; // 新增字段

    @Excel("1男 2女")
    private Byte sex; // 新增字段

    @Excel("手机号")
    private String phone; // 新增字段

    @Excel("出生日期")
    private String birthDate; // 新增字段

    @Excel("民族")
    private String ethnicity; // 新增字段

    @Excel("家庭住址")
    private String homeAddress; // 新增字段

    @Excel("户口所在地")
    private String hukouLocation; // 新增字段

    @Excel("病史")
    @Lob
    private String medicalHistory; // 新增字段

    @Excel("禁忌")
    @Lob
    private String contraindications; // 新增字段

    @Excel("婚姻状况")
    private String maritalStatus; // 新增字段

    @Excel("家庭人口")
    private Integer familyPopulation; // 新增字段

    @Excel("患者id")
    private String patId;

    @Excel("国家名称")
    private String countryName; // 新增字段

    @Excel("省")
    private String provinceName; // 新增字段

    @Excel("市")
    private String cityName; // 新增字段

    @Excel("区/县")
    private String townName; // 新增字段

    @Excel("国家编号")
    private Integer country; // 新增字段

    @Excel("省编号")
    private Integer province; // 新增字段

    @Excel("市编号")
    private Integer city; // 新增字段

    @Excel("区/县编号")
    private Integer town; // 新增字段

    @Excel("职业名称")
    private String professionName; // 新增字段

    @Excel("居民类别ID")
    private String patTypeId; // 新增字段

    @Excel("居民类别名称")
    private String patTypeName; // 新增字段

    private String openid; // 新增字段


    @Excel("存储患者信息")
    private String info;


    @Excel("是否为五类人员0否 1是")
    private Integer isWl;

    @Transient
    private PatientAdmission patientAdmission;

    private Byte status = StatusEnum.OK.getCode();


}
